package com.atguigu.ssyx.acl.utils;

import com.atguigu.ssyx.model.acl.Permission;

import java.util.ArrayList;
import java.util.List;

// 定义工具类，封装递归 获取所有菜单
public class PermissionHelper {

    public static List<Permission> build(List<Permission> allList) {

        //1.创建最终数据封装的集合 用于存放所有菜单数据
        ArrayList<Permission> tress = new ArrayList<>();
        //遍历所有菜单List集合，得到第一层数据,pid=0
        for (Permission permission : allList) {
            //先找到第一层数据，pid=0 即顶层菜单数据
            if (permission.getPid() == 0) {
                //封装第一层数据
                permission.setLevel(1);
                //调用方法，从第一层开始往下找
                tress.add(findChildren(permission, allList));

            }
        }
        return tress;

    }

    //permission 当前节点 allList 所有菜单集合
    private static Permission findChildren(Permission permission, List<Permission> allList) {

        //2.封装子菜单数据
        permission.setChildren(new ArrayList<Permission>());

        //遍历所有菜单数据，判断当前节点的id是否等于子菜单的pid
        for (Permission child : allList) {
            if (permission.getId().longValue() == child.getPid().longValue()) {

                if (child.getChildren() == null) {
                    child.setChildren(new ArrayList<>());
                }
                //封装子菜单数据
                child.setLevel(permission.getLevel() + 1);
                //封装子菜单数据
                permission.getChildren().add(findChildren(child, allList));
            }
        }

        return permission;
    }
}
